資料庫上下文是一個在應用程式和資料庫之間充當中介的對象。 它通常用於管理與資料庫的交互,包括連接管理、資料查詢和持久化等任務。 在許多 ORM(物件關聯映射)框架中,資料庫上下文負責映射應用程式中的物件模型到資料庫中的表結構,並執行資料庫操作。
在 Entity Framework Core(EF Core)中,資料庫上下文由 DbContext 類別表示。 DbContext 包含一個或多個 DbSet 屬性,每個屬性代表了一個實體集合,它們對應於資料庫中的表。 DbContext 還提供了一系列方法,用於執行查詢、新增、更新和刪除操作,以及管理資料庫連接和事務。
接著昨天我們指令下完之後,出現的Context檔案會長這樣
using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
namespace mm4.Models;
public partial class MyContext : DbContext
{
    public MyContext()
    {
    }
    public MyContext(DbContextOptions<MyContext> options)
        : base(options)
    {
    }
    public virtual DbSet<Order> Orders { get; set; }
    public virtual DbSet<User> Users { get; set; }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            IConfigurationRoot configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json")
                .Build();
            optionsBuilder.UseMySql("server=localhost;port=3306;database=aspnet;user=root;password=root", ServerVersion.Parse("10.4.29-mariadb"));
        }
    }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder
            .UseCollation("utf8mb4_unicode_ci")
            .HasCharSet("utf8mb4");
        modelBuilder.Entity<Order>(entity =>
        {
            entity.HasKey(e => e.Id).HasName("PRIMARY");
            entity.ToTable("order");
            entity.Property(e => e.Id)
                .ValueGeneratedNever()
                .HasColumnType("int(11)")
                .HasColumnName("id");
            entity.Property(e => e.Name)
                .HasMaxLength(255)
                .HasColumnName("name");
        });
        modelBuilder.Entity<User>(entity =>
        {
            entity.HasKey(e => e.Id).HasName("PRIMARY");
            entity.ToTable("user");
            entity.Property(e => e.Id)
                .ValueGeneratedNever()
                .HasColumnType("int(11)")
                .HasColumnName("id");
            entity.Property(e => e.Name)
                .HasMaxLength(255)
                .HasColumnName("name");
            entity.Property(e => e.Password)
                .HasMaxLength(255)
                .HasColumnName("password");
        });
        OnModelCreatingPartial(modelBuilder);
    }
    partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}
這個class使用partial,所以可以拆開放在不同檔案中寫方法,至於什麼是partial我們之後再講~
各位可以看到
 public virtual DbSet<Order> Orders { get; set; }
這一行就是將Model宣告進資料庫,只有在資料庫上下文中寫上這一行,之後建立資料庫遷移才會新增這張表上去,沒有加的話他在Asp.Net Core裡面就只是個普通Model,不會跟資料庫連結
OnConfiguring就是真正連接資料庫的地方拉~
optionsBuilder.UseMySql("server=localhost;port=3306;database=aspnet;user=root;password=root", ServerVersion.Parse("10.4.29-mariadb"));
這一行就是你的資料庫連接資訊,不過通過指令生成的他的連線資訊會寫死在Context檔案裡面,我們需要把它移到外面的appsettings設定檔中去
OnConfiguring方法改成這樣:
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            IConfigurationRoot configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json")
                .Build();
            string connectionString = configuration.GetConnectionString("DefaultConnection");
            optionsBuilder.UseMySql(connectionString, ServerVersion.Parse("10.4.29-mariadb"));
        }
    }
然後在appsettings.json檔案增加:
  "ConnectionStrings": {
    "DefaultConnection": "server=localhost;port=3306;database=aspnet;user=root;password=root"
  }
OnModelCreating方法就是之後要設資料庫關聯和資料庫的欄位設定的地方,這裡先帶過之後講關聯資料表再回來